package com.learn.file.controller;

import cn.xuyanwu.spring.file.storage.FileInfo;
import cn.xuyanwu.spring.file.storage.FileStorageService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

@RestController
public class FileController {

    @Autowired
    private FileStorageService fileStorageService;

    @PostMapping("/upload")
    public Object upload(MultipartFile file) {
        FileInfo upload = fileStorageService.of(file).upload();
        return upload;
    }


    /**
     * 公众号：程序员小富
     * 上传图片裁剪大小并生成一张缩略图
     */
    @PostMapping("/uploadThumbnail")
    public FileInfo uploadThumbnail(MultipartFile file) {
        return fileStorageService.of(file)
                //将图片大小调整到 1000*1000
                .image(img -> img.size(1000, 1000))
                //再生成一张 200*200 的缩略图
                .thumbnail(th -> th.size(200, 200))
                .upload();
    }


    /**
     * 公众号：程序员小富
     * 上传文件到指定存储平台，成功返回文件信息
     */
    @PostMapping("/upload-platform")
    public FileInfo uploadPlatform(MultipartFile file) {
        return fileStorageService.of(file)
                //使用指定的存储平台
                .setPlatform("minio")
                .upload();
    }


    /**
     * 公众号：程序员小富
     * 下载文件
     */
    @PostMapping("/download")
    public void download(MultipartFile file) {
        // 获取文件信息
        FileInfo fileInfo = fileStorageService.getFileInfoByUrl("http://127.0.0.1:8080/63a1829c2569bcc62f8445de.jpg");

        // 下载到文件
        fileStorageService.download(fileInfo).file("D:\\yixingwang\tmp\63a1829c2569bcc62f8445de.jpg");

        // 直接通过文件信息中的 url 下载，省去手动查询文件信息记录的过程
        fileStorageService.download("http://127.0.0.1:8080/63a1829c2569bcc62f8445de.jpg").file("D:\\yixingwang\tmp\63a1829c2569bcc62f8445de.jpg");

        // 下载缩略图
        fileStorageService.downloadTh(fileInfo).file("D:\\yixingwang\tmp\63a1829c2569bcc62f8445de.jpg.min.jpg");
    }
}
